package com.yzy.java;

/**
 * @author youzhiyong
 * 测试左移右移 以及无符号右移  不存在无符号左移
 * ** 左移 << 右边补0
 * ** (符号)右移 >> 若为正数，左边补0，若为负数，左边补1
 * ** 无符号右移 >>> 不管正负数，左边都补0
 *
 * ** 负数需要取反码： 按位取反，末尾加1
 * @date 2020/9/24 9:28 上午
 */
public class Test01 {

    public static void main(String[] args) {
        test0();
        System.out.println("-----------------------------------------");
        test1();

        Integer i = 10;
        System.out.println(i.byteValue());
    }

    /**
     * 负数需要取反码： 按位取反，末尾加1
     */
    public static void test0() {
        int a0 = 0b1000_0000_0000_0000_0000_0000_0000_0001;  // -2147483647
        int a1 = 0b1000_0000_0000_0000_0000_0000_0000_0000;  // -2147483648
        int a2 = 0b1111_1111_1111_1111_1111_1111_1111_1111;  // -1
        int a3 = 0b0111_1111_1111_1111_1111_1111_1111_1111;  // 2147483647
        int a4 = 0b0000_0000_0000_0000_0000_0000_0000_0000;  // 0
        System.out.println("a0:" + a0);
        System.out.println("a1:" + a1);
        System.out.println("a2:" + a2);
        System.out.println("a3:" + a3);
        System.out.println("a4:" + a4);
    }

    public static void test1() {
        int a0 = 0b1000_0000_0000_0000_0000_0000_0000_0001;  // -2147483647
        int a00 = 0b1111_1111_1111_1111_1111_1111_1111_1110;  // 由a0 >> 30 得到
        int a01 = 0b0000_0000_0000_0000_0000_0000_0000_0010;  // 由a0 >>> 30 得到
        int a1 = 0b1111_1111_1111_1111_1111_1111_1111_1111;  // -1
        int a2 = 0b0000_0000_0000_0000_0000_0000_0000_0001;  // 2147483647
        int a3 = 0b0000_0000_0000_0000_0000_0000_0000_0001;  // 0
        System.out.println("a0>>30:" + (a0 >> 30));
        System.out.println("a00:" + a00);
        System.out.println("a0>>>30:" + (a0 >>> 30));
        System.out.println("a01:" + a01);
        System.out.println("a1>>16:" + (a1 >> 16));
        System.out.println("a1>>>16:" + (a1 >>> 16));
        System.out.println("a2>>16:" + (a2 << 2));
        System.out.println("a2>>16:" + (a2 >> 2));




    }

}
